home *** CD-ROM | disk | FTP | other *** search
- #include "FlightRecorder.h"
-
- void CreateMyVideoTrack (Movie theMovie);
- OSErr PrepareVideoTrack (storage *s, CWindowPtr pressMe);
- OSErr PrepareForSampling (storage *s, CWindowPtr pressMe);
- OSErr MakeAMovieFile (storage *s, CWindowPtr pressMe);
-
- Boolean StartQuickTimeRecording (storage *s, CWindowPtr pressMe)
- {
- short error;
- long result;
-
- error = EnterMovies();
- if(error) {
- DebugStr("\p EnterMovies");
- }
-
- error = MakeAMovieFile(s, pressMe);
- if(error) {
- DebugStr("\p MakeAMovieFile");
- }
-
- error = PrepareForSampling(s, pressMe);
- if(error) {
- DebugStr("\p PrepareForSampling");
- }
-
- return error;
-
- }
-
- OSErr MakeAMovieFile (storage *s, CWindowPtr pressMe)
- {
- FSSpec mySpec;
- short resRefNum = 0;
- short resId = 0;
- OSErr err = noErr;
-
- FSMakeFSSpec(0, 0,"\pInstant Reply", &mySpec);
-
- err = CreateMovieFile ( &mySpec,
- 'TVOD',
- -1, // smSystemScript
- createMovieFileDeleteCurFile,
- &resRefNum,
- &s->movie );
-
- if(err) DebugStr("\pCreateMovieFile");
-
- PrepareVideoTrack (s, pressMe);
-
- err = AddMovieResource (s->movie, resRefNum, &resId,
- "\pInstant Reply");
-
- if(err) DebugStr("\p AddMovieResource");
-
- if (resRefNum) CloseMovieFile (resRefNum);
-
- return err;
- }
-
- OSErr PrepareVideoTrack (storage *s, CWindowPtr pressMe)
- {
- OSErr err = noErr;
-
- s->track = NewMovieTrack (s->movie,
- FixRatio(pressMe->portRect.right,1),
- FixRatio(pressMe->portRect.bottom,1),
- kNoVolume);
-
-
- if(err = GetMoviesError()) DebugStr("\p NewMovieTrack");
-
- s->media = NewTrackMedia (s->track, VideoMediaType,
- 600, // Video Time Scale
- nil, 0);
-
- if(err = GetMoviesError()) DebugStr("\p NewTrackMedia");
-
- err = BeginMediaEdits (s->media);
- if(err = GetMoviesError()) DebugStr("\p BeginMediaEdits");
-
- err = PrepareForSampling (s, pressMe);
-
- }
-
- // FlightRecorder.h
-
- OSErr PrepareForSampling (storage *s, CWindowPtr pressMe)
- {
- OSErr err = noErr;
- long maxSize;
-
- err = GetMaxCompressionSize (pressMe->portPixMap,
- &pressMe->portRect,
- 0, // let ICM choose depth
- codecNormalQuality,
- 'rle ',
- (CompressorComponent) anyCodec,
- &maxSize );
- if(err) {
- DebugStr("\p GetMaxCompressionSize sucks");
- }
-
- s->imageDesc = (ImageDescriptionHandle)NewHandle(4);
- s->compressBuff = NewHandle(maxSize);
- MoveHHi( (Handle)s->compressBuff );
- HLock( (Handle)s->compressBuff );
-
- return err;
- }
-
-
- void CompressFrame(storage *s,CWindowPtr pressMe)
- {
- char *compressedDataPtr;
- OSErr err;
-
- compressedDataPtr = StripAddress( s->compressBuff );
- err = CompressImage ( pressMe->portPixMap,
- &pressMe->portRect,
- codecHighQuality,
- 'rle ',
- s->imageDesc,
- compressedDataPtr );
- if(err) {
- DebugStr("\p CompressImage");
- }
-
- err = AddMediaSample(s->media,
- s->compressBuff,
- 0, // no offset in data
- (**s->imageDesc).dataSize,
- 5, // frame duration = 1/10 sec
- (SampleDescriptionHandle)s->imageDesc,
- 1, // one sample
- 0, // self-contained samples
- nil);
-
- if(err) {
- DebugStr("\p AddMediaSample");
- }
-
- }
-
-
- void EndRecording(storage *s)
- {
- OSErr err;
-
- err = EndMediaEdits (s->media);
- if(err) {
- DebugStr("\p EndMediaEdits");
- }
-
- err = InsertMediaIntoTrack (s->track,
- 0, // track start time
- 0, // media start time
- GetMediaDuration (s->media),
- kFix1);
- if(err) {
- DebugStr("\p InsertMediaIntoTrack");
- }
- DisposeHandle ((Handle)s->imageDesc);
- DisposeHandle (s->compressBuff);
- }
-